package cn.shengchao.examstar.ai.domain.repository;

import cn.hutool.core.date.DateTime;
import cn.shengchao.examstar.ai.infrastructure.dao.po.AiSession;

import java.util.Date;
import java.util.List;

public interface IAiSessionRepository {

    /**
     * 创建一个会话
     */
    AiSession createSession(String conversationId, Long userId, String type, Long objectId, Long subjectId);

    /**
     * 保持聊天记录
     */
    void saveChatHistory(String sessionId, String messages);

    /**
     * 获取一个会话下的聊天记录
     */
    String getChatHistory(String sessionId);

    /**
     * 获取历史会话记录
     */
    List<String> getHistorySession(Long userId, Long objectId, Long subjectId);

    /**
     * 根据会话ID获取会话信息
     */
    AiSession getSessionByConversationId(String conversationId);

    /**
     * 删除会话
     */
    void deleteSession(String conversationId);

    /**
     * 会话次数
     */
    Long getSessionByTime(Long userId, DateTime startTime, Date endTime);

    /**
     * 根据会话类型获取历史会话记录
     * 
     * @param userId 用户ID
     * @param sessionType 会话类型
     * @param objectId 对象ID
     * @param subjectId 子对象ID
     * @return 历史会话记录
     */
    List<String> getHistorySessionByType(Long userId, String sessionType, Long objectId, Long subjectId);

    /**
     * 根据会话类型前缀获取历史会话记录
     * 
     * @param userId 用户ID
     * @param sessionTypePrefix 会话类型前缀
     * @param objectId 对象ID
     * @param subjectId 子对象ID
     * @return 历史会话记录
     */
    List<String> getHistorySessionByTypePrefix(Long userId, String sessionTypePrefix, Long objectId, Long subjectId);

    /**
     * 检查会话是否属于指定用户
     * 
     * @param conversationId 会话ID
     * @param userId 用户ID
     * @return 是否属于该用户
     */
    boolean isSessionOwner(String conversationId, Long userId);
}